package com.thinkgsp.sys.persistence;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.thinkgsp.sys.model.SysUser;
import com.thinkgsp.sys.model.SysUserDept;
import com.thinkgsp.sys.model.SysUserInvAdd;
import com.thinkgsp.sys.model.SysUserRole;

/**
 * 系统用户Dao
 * @author evan
 *
 */
public interface SysUserMapper {
	
	SysUser getUser(Integer userId);
	/**
	 * 根据用户名获取一个用户
	 * @param username
	 * @return
	 */
	SysUser loadUserByUsername(String username);
	
	/**
	 * 获取所有用户列表
	 * @return
	 */
	List<SysUser> getUsers();
	
	/**
	 * 插入一个用户
	 * @param user
	 */
	void insertUser(SysUser user);
	
	/**
	 * 修改一个用户信息
	 * @param user
	 */
	void updateUser(SysUser user);
	
	/**
	 * 删除一个用户
	 * @param user
	 */
	void deleteUser(Integer userId);
	
	/**
	 * 获取用户密码
	 * @param userId
	 * @return
	 */
	String getUserPassword(Integer userId);
	
	/**
	 * 添加用户角色
	 * @param map key 代表 userId
	 */
	void insertUserRole(SysUserRole ur);
	
	/**
	 * 修改用户角色
	 * @param role
	 */
	void updateUserRole(SysUserRole ur);
	
	/**
	 * 删除用户的所有角色
	 * @param userId 
	 */
	void deleteUserRole(Integer userId);
	
	/**
	 * 添加用户可用库房
	 * @param ui
	 */
	@Deprecated
	void insertUserInvAdd(SysUserInvAdd ui);
	
	/**
	 * 添加用户的可用部门
	 * @param ud
	 */
	void insertUserDept(SysUserDept ud);
	/**
	 * 修改用户可用库房
	 * @param ui
	 */
	@Deprecated
	void updateUserInvAdd(SysUserInvAdd ui);
	
	/**
	 * 修改用户的可用部门
	 * @param ud
	 */
	void updateUserDept(SysUserDept ud);
	/**
	 * 删除用户可用库房
	 * @param id
	 */
	@Deprecated
	void deleteUserInvAdd(Integer id);
	
	/**
	 * 删除用户的可用部门
	 * @param id
	 */
	void deleteUserDept(Integer id);
	/**
	 * 按用户Id删除可用库房
	 * @param userId
	 */
	@Deprecated
	void deleteUserInvAddByUserId(Integer userId);
	
	/**
	 * 按用户Id删除可用部门
	 * @param userId
	 */
	void deleteUserDeptByUserId(Integer userId);
	
	/**
	 * 删除用户角色
	 * @param userId
	 * @param roleId
	 */
	void deleteUserRoleSingle(@Param("userId")Integer userId,@Param("roleId")Integer roleId);
	
	/**
	 * 删除用户库房
	 * @param userId
	 * @param invAddId
	 */
	@Deprecated
	void deleteUserInvAddSingle(@Param("userId")Integer userId,@Param("invAddId")Integer invAddId);
	
	/**
	 * 删除用户可用部门
	 * @param userId
	 * @param deptId
	 */
	void deleteUserDeptSingle(@Param("userId")Integer userId,@Param("deptId")Integer deptId);
	
	/**
	 * 设置用户的默认库房
	 * @param userId
	 * @param invAddId
	 */
	@Deprecated
	void setDefaultInvAdd(@Param("userId")Integer userId,@Param("invAddId")Integer invAddId);
	
	/**
	 * 设置用户的默认库房
	 * @param userId
	 * @param deptId
	 */
	void setDefaultDept(@Param("userId")Integer userId,@Param("deptId")Integer deptId);
	
	/**
	 * 清除用户的默认库房
	 * @param userId
	 */
	@Deprecated
	void clearDefaultInvAdd(Integer userId);
	
	/**
	 * 清除用户的默认部门
	 * @param userId
	 */
	void clearDefaultDept(Integer userId);
}
